/******************************************************************************
 * SAGE - Scalable Adaptive Graphics Environment
 *
 * Module: suil.cpp - SAGE User Interface Library
 * Author : Byungil Jeong
 *
 * Copyright (C) 2004 Electronic Visualization Laboratory,
 * University of Illinois at Chicago
 *
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above
 *    copyright notice, this list of conditions and the following disclaimer
 *    in the documentation and/or other materials provided with the distribution.
 *  * Neither the name of the University of Illinois at Chicago nor
 *    the names of its contributors may be used to endorse or promote
 *    products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * Direct questions, comments etc about SAGE to bijeong@evl.uic.edu or 
 * http://www.evl.uic.edu/cavern/forum/
 *
 *****************************************************************************/

#include "suil.h"

int suil::init(char *config)
{
   char *sageDir = getenv("SAGE_DIRECTORY");
   if (!sageDir) {
      std::cout << "suil : cannot find the environment variable SAGE_DIRECTORY" << std::endl;
      return -1;
   }   

   char fsConfigFile[TOKEN_LEN];
   sprintf(fsConfigFile, "%s/bin/%s", sageDir, config);

   fsClient::init(fsConfigFile, "uiPort");
   
   trackingClient = new QUANTAnet_udp_c;
   trackingClient->init();
   
   FILE *fp = fopen(fsConfigFile, "r");
   
   if (!fp) {
      printf("fail to open fsManager configuration file\n");
      return -1;
   }

   char token[TOKEN_LEN];
   int trackingPort;
   
   while(getToken(fp, token) != EOF) {
      if (strcmp(token, "trackPort") == 0) {
         getToken(fp, token);
         trackingPort = atoi(token);
      } 
   }

   fclose(fp);

   trackingClient->setSendAddress(fsIp, trackingPort);
}

int suil::sendTrackInfo(int id, float x, float y, float ori, char *data)
{
   char msg[TRACKING_DATA_SIZE];
   
   sprintf(msg, "%d %f %f %f ", id, x, y, ori);
   int msgLen = strlen(msg);
   
   if (strlen(data) + msgLen > TRACKING_DATA_SIZE) 
      strncat(msg, data, TRACKING_DATA_SIZE - msgLen - 1);
   else
      strcat(msg, data);
      
   msgLen = strlen(msg);
      
   if (trackingClient->send(msg, msgLen) != msgLen) {
      std::cout << "Error in Tracking data sending";
      return -1;
   }      
   
   return 0;   
}
